package com.silverbox.waimai.service.goodscart;

import java.util.List;

import com.silverbox.waimai.entity.GoodsCart;
import com.silverbox.waimai.entity.extend.GoodsCartAndDetail;
import com.silverbox.waimai.entity.extend.GoodsCartExtend;

public interface GoodsCartService {

	/**
	 * 获取购物车以及购物车明细
	 * 
	 * @param goodsCartExtend
	 * @return
	 */
	List<GoodsCartAndDetail> getGoodsCart(GoodsCartExtend goodsCartExtend);

	/**
	 * 新增购物车
	 * 
	 * @param GoodsCart
	 * @return
	 */
	void addGoodsCart(GoodsCart goodsCart);

	/**
	 * 更新购物车
	 * 
	 * @param GoodsCart
	 * @return
	 */
	int updateGoodsCart(GoodsCart goodsCart);

	/**
	 * 删除购物车
	 * 
	 * @param goodsCart
	 */
	int deleteGoodsCartById(Integer id);

	/**
	 * 删除购物车（打包专用）
	 * 
	 * @param goodsCart
	 */
	int deleteGoodsCartForPack(GoodsCartExtend goodsCart);

	/**
	 * 更新购物车(打包专用)
	 * 
	 * @param GoodsCart
	 * @return
	 */
	int updateGoodsCartForPack(GoodsCartExtend goodsCart);

	/**
	 * 清空购物车
	 * 
	 * @param goodsCart
	 */
	int removeGoodsCart(GoodsCart goodsCart);

	/**
	 * 获取购物车同一商品相同属性
	 * 
	 * @param goodsCart
	 * @return
	 */
	GoodsCart getSameGoodsProp(GoodsCartExtend goodsCartExtend);

	/**
	 * 根据桌台获取购物车同一商品不同属性的种类数
	 * 
	 * @param goodsCartExtend
	 * @return
	 */
	int getSameGoodsDiffPropNum(GoodsCartExtend goodsCartExtend);

	/**
	 * 获取购物车打包存在相同商品数量
	 * 
	 * @param goodsCart
	 * @return
	 */
	int getSameGoodsCartPackCount(GoodsCartExtend goodsCart);

	/**
	 * 根据id获取购物车
	 * 
	 * @param id
	 * @return
	 */
	GoodsCartAndDetail getGoodsCartById(Integer id);

	/**
	 * 备注页修改属性提交时判断购物车有无相同属性的菜品
	 * @param goodsCart
	 * @return
	 */
	GoodsCart getGoodsCartByRemarkCommit(GoodsCartExtend goodsCart);

	/**
	 * 存在预点餐购物车订单是，进入扫桌台码后，将桌台信息添加到购物车中
	 * @param  storeId
	 * @param  buyerId
	 * @param  tableName
	 * @return Object  
	 * @author litao
	 * @date 2018年4月23日
	 */
	int updateGoodsCartForTableNo(List<Integer> goodsCartId, String tableName);

	/**
	 * 清空一定时间段购物车
	 * @param storeId
	 * @param tableName
	 * @param createTime
	 * @return
	 */
	int deleteGoodsCartByTableName(GoodsCartExtend goodsCart);

	/**
	 * 修改必选菜（先删除后新增）
	 * @param goodsCartExtend
	 * @param goodsCart
	 */
	int updateGoodsCartForMustGoods(GoodsCartExtend goodsCartExtend, List<GoodsCartAndDetail> goodsCart);

	/**
	 * 查询已删除的可修改必点菜
	 * @param storeId
	 * @param tableName
	 * @return
	 */
	List<GoodsCart> getDeletedNeedGoodsCart(GoodsCartExtend goodsCart);

	/**
	 * 清除已删除的可修改必选菜
	 * @param goodsCartExtend
	 * @return
	 */
	int removeDeletedNeedGoodsCart(GoodsCartExtend goodsCartExtend);

	/**
	 * 清除购物车内可修改的必选菜
	 * @param goodsCart
	 */
	void updateNeedGoods(GoodsCart goodsCart);

    void deleteMyGoodsCart(Integer shopId, String buyerId);

    void deleteMyGoodsCartByTableNo(Integer shopId, String tableNum);

}
